import util.DbUtil
DbUtil.prepare()
def sql = DbUtil.sql
// 得到 dataset
def ds = sql.dataSet('t_athlete')

// ds.rows() 得到 rows
println ds.rows().size()

// 通过 add(map) 添加一行数据
ds.add(
	firstname: 'aa',
	lastname: 'aa',
	birthday: Date.parse('yyyy-MM-dd', '1988-11-11')
	)

println ds.rows().size()

def results = []
ds.each {
	// 传入的是 GroovyResultSet 的代理对象
	println it.dump()
	results << it.lastname
}
println results

results = []
ds.rows().each {
	// 传入的是 GroovyResultSet 对象
	println it.dump()
	results << it.firstname
}
println results

ds.add(
	firstname: 'eeee',
	lastname: 'ee'
	)
// 用 collect, null 也会加进去
results = ds.rows().collect { it.birthday }
println results

// findAll 返回的仍然是 dataset
// 注意 null 的 birthday 不会被返回
def filtered = ds.findAll { it.birthday < '2000-01-01' && it.birthday >= '1987-01-01' }
/**
 *  findAll 闭包中的表达式是 ast 表达式, 与 sql 的对照是这样的:
 *  && 等价于 and
 *  || 等价于 or
 *  == 等价于 =
 *  其他操作符一样
 *  it.propertyname 等价于 propertyname
 *  
 * 
 */

println '-' * 32
filtered.each { println it }

// sort, reverse 方法
println '-' * 32
filtered = filtered.sort { it.birthday }
filtered.each { println it }
println '-' * 32
filtered = filtered.reverse()
filtered.each { println it }

println '-' * 32
// 查看 filtered 中的 sql 语句和参数
println filtered.sql
println filtered.parameters

sql.close()
